home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Scope / Scope Disk #017 (199x)(Scope PD)(US)[WB].zip / Scope Disk #017 (199x)(Scope PD)(US)[WB].adf / QMouse1.0 / Util.asm < prev   
Assembly Source File  |  1988-06-29  |  3KB  |  135 lines

  1.         section text,CODE
  2.  
  3.         INCLUDE "exec/types.i"
  4.         INCLUDE "exec/memory.i"
  5.         INCLUDE "exec/io.i"
  6.  
  7.  
  8. CALLSYS MACRO
  9.         xref    _LVO\1
  10.         CALLLIB _LVO\1
  11.         ENDM
  12.  
  13.  
  14.  
  15.         XDEF    CreatePort
  16.         XDEF    DeletePort
  17.         XDEF    CreateStdIO
  18.         XDEF    DeleteStdIO
  19.         XDEF    CreateExtIO
  20.         XDEF    DeleteExtIO
  21.  
  22.  
  23.  
  24. CreatePort:       ; ( Name:a0, Pri:d0 )
  25.         movem.l d2-d4/a2,-(sp)
  26.         move.l  a0,d3
  27.         move.b  d0,d4
  28.  
  29.         moveq   #-1,d0
  30.         CALLSYS AllocSignal
  31.         cmpi.b  #-1,d0
  32.         beq     CreatePort_Err
  33.         move.b  d0,d2
  34.  
  35.         moveq   #MP_SIZE,d0
  36.         move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
  37.         CALLSYS AllocMem
  38.         tst.l   d0
  39.         beq     CreatePort_Err
  40.         move.l  d0,a2
  41.  
  42.         move.l  d3,LN_NAME(a2)
  43.         move.b  d4,LN_PRI(a2)
  44.         move.b  #NT_MSGPORT,LN_TYPE(a2)
  45.         move.b  #PA_SIGNAL,MP_FLAGS(a2)
  46.         move.b  d2,MP_SIGBIT(a2)
  47.         sub.l   a1,a1
  48.         CALLSYS FindTask
  49.         move.l  d0,MP_SIGTASK(a2)
  50.  
  51.         tst.l   d3
  52.         beq     CreatePortNoName
  53.         move.l  a2,a1
  54.         CALLSYS AddPort
  55.         move.l  a2,d0
  56.         bra     CreatePort_End
  57.  
  58. CreatePortNoName:
  59.         lea     MP_MSGLIST(a2),a1
  60.         NEWLIST a1
  61.         move.l  a2,d0
  62.  
  63. CreatePort_End:
  64.         movem.l (sp)+,d2-d4/a2
  65.         rts
  66.  
  67. CreatePort_Err:
  68.         moveq   #0,d0
  69.         bra     CreatePort_End
  70.  
  71.  
  72.  
  73. DeletePort:       ; ( Port:d0 )
  74.         move.l  a2,-(sp)
  75.         move.l  d0,a2
  76.  
  77.         tst.l   LN_NAME(a2)
  78.         beq     DeletePort_NoName
  79.         move.l  a2,a1
  80.         CALLSYS RemPort
  81. DeletePort_NoName:
  82.  
  83.         move.b  MP_SIGBIT(a2),d0
  84.         CALLSYS FreeSignal
  85.  
  86.         move.l  a2,a1
  87.         moveq   #MP_SIZE,d0
  88.         CALLSYS FreeMem
  89.  
  90.         move.l  (sp)+,a2
  91.         rts
  92.  
  93.  
  94.  
  95. CreateStdIO:      ; ( ReplyPort:a0 )
  96.         moveq   #IOSTD_SIZE,d0
  97.  
  98. CreateExtIO:      ; ( ReplyPort:a0, Size:d0 )
  99.         movem.l d2-d3,-(sp)
  100.         move.l  a0,d3
  101.         beq     CreateExtIO_Err
  102.         move.l  d0,d2
  103.  
  104.         move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
  105.         CALLSYS AllocMem
  106.         tst.l   d0
  107.         beq     CreateExtIO_End
  108.         move.l  d0,a1
  109.  
  110.         move.b  #NT_MESSAGE,LN_TYPE(a1)
  111.         move.w  d2,MN_LENGTH(a1)
  112.         move.l  d3,MN_REPLYPORT(a1)
  113.  
  114. CreateExtIO_End:
  115.         movem.l (sp)+,d2-d3
  116.         rts
  117.  
  118. CreateExtIO_Err:
  119.         moveq   #0,d0
  120.         bra     CreateExtIO_End
  121.  
  122.  
  123.  
  124. DeleteStdIO:       ; ( IORequest:d0 )
  125. DeleteExtIO:       ; ( IORequest:d0 )
  126.         move.l  d0,a1
  127.         moveq   #0,d0
  128.         move.w  MN_LENGTH(a1),d0
  129.         CALLSYS FreeMem
  130.         rts
  131.  
  132.  
  133.         end
  134.  
  135.